
int KnightOfTwo (short int sudoku[9][9],short int missing[27][10], int fator)
{
	short int linha, coluna, count1=9,count2=9,x=0,y1=0, y2=0,z=0;
	int compChart[3][9],entradasPorQuadro[9];

	for (linha=0;linha<3;linha++)
	{
		for (coluna=0;coluna<9;coluna++)
		{
			compChart[linha][coluna]=1;
			entradasPorQuadro[coluna]=0;
		}
	}
	//0

	for (linha=0;linha<27;linha++)
	{
		if (missing[linha][fator]==1)
		{
			if (linha>-1 && linha<9)
			{
				compChart[0][linha]--;
				count1--;
			}
			else if (linha>8 && linha<18)
			{
				compChart[1][linha-9]--;
				count2--;
			}
			else if (linha>17 && linha<27)
			{
				compChart[2][linha-18]--;
			}
		}
	}
	//1

	int casasPossiveis[count1*count2][2];

	for (coluna=0;coluna<9;coluna++)
	{
		if (compChart[0][coluna]==1)
		{
			for (x=0+y1;x<count2+y1;x++)
			{
				casasPossiveis[x][0]=coluna;
			}
			y1 = y1 + count2;
		}
		if (compChart[1][coluna]==1)
		{
			for (x=0+y2;x<count2*count1;x=x+count2)
			{
				casasPossiveis[x][1]=coluna;
			}
			y2 = y2 + 1;
		}
	}
	//2

	for (linha=0;linha<count1*count2;linha++)
	{
		if (sudoku[(casasPossiveis[linha][0])][(casasPossiveis[linha][1])] == 0 && compChart[2][ddq(casasPossiveis[linha][0],casasPossiveis[linha][1])]==1)
		{
			entradasPorQuadro[ddq(casasPossiveis[linha][0],casasPossiveis[linha][1])]++;
		}
	}
	//3

	for (x=0;x<9;x++)
	{
		if (entradasPorQuadro[x]==1)
		{
			for (linha=0;linha<count1*count2;linha++)
			{
				if (ddq(casasPossiveis[linha][0],casasPossiveis[linha][1]) == x && sudoku[(casasPossiveis[linha][0])][(casasPossiveis[linha][1])] == 0 && compChart[2][ddq(casasPossiveis[linha][0],casasPossiveis[linha][1])]==1)
				{
					z = z + 1000*casasPossiveis[linha][0] + 100*casasPossiveis[linha][1] + 10*(fator+1);
					x = 9;
					linha = count1*count2;
				}
			}
		}
	}
	//4

	/*for(linha=0; linha<count2*count1; linha++)
	{
		printf("Linha x Coluna -> ");
		for (coluna=0;coluna<2; coluna++)
		{
			printf("%d ", casasPossiveis[linha][coluna]);
		}
		printf("\n");
	}*/
	//5
	return z;

}